﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sinacor.Infra.UI.Common;

namespace Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Translator.DataContractToModel
{
    public class Bloqueio
    {
        public Model.Bloqueio ToBloqueio(Bovespa.ManutencaoOrdens.Bloqueio.BloqueioResponse from)
        {
            Model.Bloqueio to = null;

            if (from != null)
            {
                to = new Model.Bloqueio();

                to.Ativo = from.Ativo;
                to.Codigo = from.Codigo;
                if(from.CodigoAssessor.HasValue)
                    to.Assessor = new Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Assessor { Codigo = from.CodigoAssessor.Value };
                to.Cliente = this.ToCliente(from.Cliente);
                if(from.CodigoGrupoAfinidade.HasValue)
                    to.GrupoAfinidade = new Sinacor.UI.Bovespa.ManutencaoOrdens.Model.GrupoAfinidade { Codigo = from.CodigoGrupoAfinidade.Value };
                if(from.CodigoMercado.HasValue)
                    to.Mercado = new Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Mercado { Codigo = from.CodigoMercado.Value };
                if(from.CodigoTipoCliente.HasValue)
                    to.TipoCliente = new Sinacor.UI.Bovespa.ManutencaoOrdens.Model.TipoCliente { Codigo = from.CodigoTipoCliente.Value };
                to.DataFinal = from.DataFinal;
                to.DataInicial = from.DataInicial;
                to.Descricao = from.Descricao;

                if (from.NaturezaOperacao.HasValue)
                {
                    switch (from.NaturezaOperacao.Value)
                    {
                        case Bovespa.ManutencaoOrdens.Bloqueio.NaturezaOperacao.Compra:
                            to.NaturezaOperacao = Model.Enum.NaturezaOperacao.Compra;
                            break;
                        case Bovespa.ManutencaoOrdens.Bloqueio.NaturezaOperacao.Venda:
                            to.NaturezaOperacao = Model.Enum.NaturezaOperacao.Venda;
                            break;
                        case Bovespa.ManutencaoOrdens.Bloqueio.NaturezaOperacao.CompraVenda:
                            to.NaturezaOperacao = Model.Enum.NaturezaOperacao.CompraVenda;
                            break;
                    }
                }

                switch (from.Tipo)
                {
                    case Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.Cliente:
                        to.Tipo = Model.Enum.TipoBloqueio.Cliente;
                        break;
                    case Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.Assessor:
                        to.Tipo = Model.Enum.TipoBloqueio.Assessor;
                        break;
                    case Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.TipoCliente:
                        to.Tipo = Model.Enum.TipoBloqueio.TipoCliente;
                        break;
                    case Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.GrupoAfinidade:
                        to.Tipo = Model.Enum.TipoBloqueio.GrupoAfinidade;
                        break;
                    case Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.Papel:
                        to.Tipo = Model.Enum.TipoBloqueio.Papel;
                        break;
                    case Bovespa.ManutencaoOrdens.Bloqueio.TipoBloqueio.Mercado:
                        to.Tipo = Model.Enum.TipoBloqueio.Mercado;
                        break;
                }
            }

            return to;
        }

        public ModelCollection<Model.Bloqueio> ToBloqueio(List<Bovespa.ManutencaoOrdens.Bloqueio.BloqueioResponse> from)
        {
            ModelCollection<Model.Bloqueio> to = null;

            if (from != null)
            {
                to = new ModelCollection<Model.Bloqueio>();

                foreach (Bovespa.ManutencaoOrdens.Bloqueio.BloqueioResponse item in from)
                {
                    to.Add(ToBloqueio(item));
                }
            }

            return to;
        }

        public Model.Cliente ToCliente(Communication.Bovespa.ManutencaoOrdens.Bloqueio.Cliente from)
        {
            if (from == null) return null;

            return new Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Cliente
            {
                Codigo = from.Codigo,
                Apelido = from.Apelido
            };
        }
    }
}
